package com.zcc.makingfriend.service;
import com.zcc.makingfriend.dao.Article;
import com.zcc.makingfriend.dto.ArticleCategoryDto;
import com.zcc.makingfriend.dto.ArticleImageDto;
import com.zcc.makingfriend.dto.PageDto;
import com.zcc.makingfriend.untils.Result;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;


/**
 * @author zcc
 */
public interface ArticleService {
    /**
     * 找到所有文章
     * @param userId
     * @param page
     * @param size
     * @return
     */
    public List<ArticleImageDto> getAllArticles(String userId, int page, int size);

    /**
     * 通过分类找到所有文章
     * @param title
     * @param userId
     * @param page
     * @param size
     * @return
     */
    public List<ArticleImageDto> getAllArticlesByCategory(String title, String userId, int page, int size);

    /**
     * 通过用户找到关注者文章
     * @param userId
     * @return
     */
    public List<ArticleImageDto> getAllArticlesByUser(String userId);

    /**
     * 搜索文章
     * @param content
     * @param userId
     * @param page
     * @param size
     * @return
     */
    List<ArticleImageDto> searchArticle(String content, String userId, int page, int size);

    /**
     * 找到点赞的文章
     * @param userId
     * @param page
     * @param size
     * @return
     */
    List<ArticleImageDto> getLikeArticles(String userId, int page, int size);

    /**
     * 统计用户点赞的文章数量
     * @param userId
     * @return
     */
    Long countUserLiked(String userId);

    /**
     * 分页查找用户的所有文章
     * @param authorId
     * @param page
     * @param size
     * @return
     */
    List<ArticleImageDto> getArticleByAuthor(Long authorId, int page, int size);

    /**
     * 模糊查询文章
     * @param pageDto
     * @return
     */
    List<ArticleImageDto> getArticlesByCondition(PageDto pageDto);

    /**
     * 通过uuid查找文章
     * @param uuid
     * @return
     */
    public ArticleImageDto getArticleByUUid(String uuid);

    /**
     * 新增文章
     * @param  articleCategoryDto
     * @return
     */
    public String addArticle(ArticleCategoryDto articleCategoryDto);

    /**
     * 删除文章
     * @param uuid
     * @return
     */
    public int deleteArticle(String uuid);

    /**
     * 修改文章
     * @param  articleCategoryDto
     * @return
     */
    public String updateArticle(ArticleCategoryDto  articleCategoryDto);

    /**
     * 点赞/取消点赞文章
     * @param status 取消点赞 1 点赞  -1 取消点赞
     * @param likes
     * @param uuid
     * @return
     */
    public int isLikeArticle(int status, int likes, String uuid);

    /**
     * 统计所有文章数量
     * @return
     */
    Long countArticles();

    /**
     * 统计模糊查询的文章数量
     * @param pageDto
     * @return
     */
    Long countConditionArticles(PageDto pageDto);

    /**
     * 统计已举报的文章数量
     * @return
     */
    Long countReportArticle();

    /**
     * 通过分类统计文章数量
     * @return
     */
    Map<String, Long> countArticleByCategory();

    /**
     * 通过用户统计文章数量
     * @return
     */
    Map<String, Long> countArticleByUser();

    /**
     * 模糊查询已举报的文章
     * @param pageDto
     * @return
     */
    List<ArticleImageDto> findReportArticleByCondition(PageDto pageDto);

    /**
     * 统计模糊查询已举报的文章的数量
     * @param pageDto
     * @return
     */
    Long countConditionReportArticles(PageDto pageDto);
}
